#pragma once

#include <gofcl_dma_r.h>

typedef struct {
	u32_s GIF0 : 1;
	u32_s FTFIF0 : 1;
	u32_s HTFIF0 : 1;
	u32_s ERRIF0 : 1;

	u32_s GIF1 : 1;
	u32_s FTFIF1 : 1;
	u32_s HTFIF1 : 1;
	u32_s ERRIF1 : 1;

	u32_s GIF2 : 1;
	u32_s FTFIF2 : 1;
	u32_s HTFIF2 : 1;
	u32_s ERRIF2 : 1;

	u32_s GIF3 : 1;
	u32_s FTFIF3 : 1;
	u32_s HTFIF3 : 1;
	u32_s ERRIF3 : 1;

	u32_s GIF4 : 1;
	u32_s FTFIF4 : 1;
	u32_s HTFIF4 : 1;
	u32_s ERRIF4 : 1;

	u32_s GIF5 : 1;
	u32_s FTFIF5 : 1;
	u32_s HTFIF5 : 1;
	u32_s ERRIF5 : 1;

	u32_s GIF6 : 1;
	u32_s FTFIF6 : 1;
	u32_s HTFIF6 : 1;
	u32_s ERRIF6 : 1;

	u32_s : 4;
} dma_int_s;

_Static_assert(sizeof(dma_int_s) == 4, "Struct dma_int_s defined error!");

static inline dma_int_s dma_rreg_intf_s(dma_qe dma_q) {
	union {
		dma_int_s i;
		u32_s u;
	} iu = {
		.u = dma_rreg(dma_q, DMA_INTF_R),
	};
	return iu.i;
}

static inline void dma_wreg_intc_s(dma_qe dma_q, dma_int_s intc) {
	union {
		dma_int_s i;
		u32_s u;
	} iu = {
		.i = intc,
	};
	dma_wreg(dma_q, DMA_INTC_R, iu.u);
}
